hhkb
컴퓨터과학

어셈블리_05_System V AMD64 ABI와 스택 프레임

작성자 : Heehyeon Yoo|2025-10-11
# Assembly# ABI# Calling Convention# Linux

협업이나 외부 라이브러리 활용을 위해서는 함수 호출 시 레지스터와 스택을 사용하는 규칙을 준수해야 한다. 리눅스 64비트 환경에서는 System V AMD64 ABI 표준을 따른다.

1. 함수 호출 규약(Calling Convention)

함수에 인자(Argument)를 전달할 때, 스택보다 속도가 빠른 레지스터를 우선적으로 사용한다. 인자 순서는 다음과 같다.

  1. RDI
  2. RSI
  3. RDX
  4. RCX
  5. R8
  6. R9

7번째 인자부터는 스택을 통해 전달한다. 이 순서를 지키지 않으면 함수가 엉뚱한 값을 참조하여 오작동하거나 종료된다.

2. 스택 프레임(Stack Frame)

함수 호출 시 생성되는 해당 함수만의 독립적인 작업 공간을 스택 프레임이라 한다. 스택 프레임은 프롤로그(Prologue)에필로그(Epilogue) 과정을 통해 생성 및 해제된다.

프롤로그(생성)

push rbp        ; 이전 함수의 베이스 포인터(RBP) 백업
mov rbp, rsp    ; 현재 스택 포인터(RSP)를 새로운 기준점(RBP)으로 설정
sub rsp, 0x10   ; 지역 변수 공간 확보

에필로그(해제)

leave           ; RBP를 복구하고 스택 프레임 정리 (mov rsp, rbp + pop rbp)
ret             ; 스택에 저장된 복귀 주소로 점프

최신 컴파일러는 최적화를 위해 RBP를 사용하지 않는 경우(Frame Pointer Omission)도 있으나, 기본적인 스택 관리 메커니즘은 동일하다.